package com.算法.软件设计与开发.试题编号_2_1_5_图形体积计算系统关键算法;

import java.io.*;
import java.util.ArrayList;

public class 任务三_图形面积计算关键算法 {

    /**
     * 编写程序实现：
     * ①定义一个抽象类 Shape，它有一个计算面积的抽象方法 calArea。
     * ②定义一个三角形类 Triangle。它有两个属性 n、m，分别表示三角形的底和高。
     * 另外，它必须继承于 Shape 类，并实现 calArea 方法来计算三角形的面积。
     * ③定义一个矩形类 Rectangle。它有两个属性 n、m，分别表示矩形的长和宽。
     * 另外，它必须继承于 Shape 类，并实现 calArea 方法来计算矩形的面积。
     * ④定义一个圆类 Circle。它有一个属性 n，表示圆形的半径。另外，它必
     * 须继承于 Shape 类，并实现 calArea 方法来计算圆形的面积。
     * ⑤分别创建一个三角形对象、一个矩形对象、一个圆形对象，然后将它们
     * 存入到一个数组中，最后将数组中各类图形的面积输出到屏幕上，同时将该结果
     * 写入 area.txt 文件中。
     */
    public static void main(String[] args) {
        //三角形类
        Triangle t = new Triangle(2,3);
        //矩形类
        Rectangle r = new Rectangle(4,5);
        //圆类
        Circle c = new Circle(3);

        Shape[] s = new Shape[]{t,r,c};
        ArrayList array = new ArrayList();
        //存入到一个数组
        for (int i = 0; i <s.length ; i++) {
            array.add(s[i].calArea());
        }

        System.out.println(array);
        String s1 = array.toString();
        byte[] bytes = s1.getBytes();
        boolean b = saveFile("D:\\Program Files (x86)\\Java\\idea\\算法\\src\\com\\算法\\软件设计与开发\\试题编号_2_1_5_图形体积计算系统关键算法\\area.txt", bytes);
        if(b)
            System.out.println("成功");
        else
            System.out.println("失败");
    }

    public static boolean saveFile(String filename,byte[] bytes){
        OutputStream outputStream = null;
        try {
            File file = new File(filename);
            File parent = file.getParentFile();
            if( !parent.exists() && !parent.mkdirs()){
                return false;
            }
            outputStream = new FileOutputStream(file);
            outputStream.write(bytes);
            outputStream.flush();
            return true;
        }catch (FileNotFoundException e){
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }finally {
            if (outputStream != null) {
                try{
                    outputStream.close();
                }catch (IOException e) {}
            }
        }
    }


}

abstract class Shape{
    public double calArea(){
        return 0;
    }
}
//三角形类
class Triangle extends Shape{
    public double  n; //底
    public double  m; //高。

    public Triangle(double n, double m) {
        this.n = n;
        this.m = m;
    }

    public double calArea(){
        double S = n*m/2;
        System.out.println("三角形面积:"+S);
        return S;
    }
}
//矩形类
class Rectangle extends Shape{
    public double  n;//长
    public double  m;//宽

    public  Rectangle(double n, double m) {
        this.n = n;
        this.m = m;
    }

    public double calArea(){
        double S = n*m;
        System.out.println("矩形面积:"+S);
        return S;
    }

}

//圆类
class Circle extends  Shape{
    public double n;

    public Circle(double n) {
        this.n = n;
    }
    public double calArea(){
        double S = Math.PI*n*n;
        System.out.println("圆的面积是:"+S);
        return S;
    }
}